<?php

class admin
{

// Объект, содержащий текущую (и единственную) копию объекта (Singleton)
static private $instance = null;

private $login;    // Переменная, содержащая текущий логин
private $password; // Переменная, содержащая текущий пароль


/**
 * Конструтор класса
 * 
 * @return void
 */
private function __construct() {
    // В дальнейшем тут будет код конструктора
}


/**
 * Функция возвращает текущий логин
 * 
 * @return string  Текщий логин
 */
function getLogin() {
    return $this->login;
}

/**
 * Функция записывает в переменную login текущий логин
 * 
 * @param  string $login  Логин
 * @return void
 */
function setLogin($login) {
    $this->login = mysql_real_escape_string($login);
}


/**
 * Функция возвращает текущий пароль
 * 
 * @return string  Текщий пароль
 */
function getPassword() {
    return $this->password;
}


/**
 * Функция возвращает MD5 хэш текущего пароля
 * 
 * @return string  Хэш текущего пароля
 */
function getPasswordHash() {
    return md5($this->password);
}

/**
 * Функция записывает в переменную password текущий пароль
 * 
 * @param  string $password  Пароль
 * @return void
 */
function setPassword($password) {
    $this->password = mysql_real_escape_string($password);
}


/**
 * Функция возвращает TRUE, если пользователь залогинен, или FALSE,
 * в случае если пользователь не залогинен
 * 
 * @return bool  Статус авторизации
 */
function isAdmin() {
    if (isset($_COOKIE[COOKIE_LOGIN]) && isset($_COOKIE[COOKIE_PASSWORD])) {
        mysql::getInstance()->select('admins', 'id', 1, array('login'    => $_COOKIE[COOKIE_LOGIN], 
                                                              'password' => $_COOKIE[COOKIE_PASSWORD]));
        if (mysql::getInstance()->numRows() == 1) {
            return true;
        } else {
            return false;
        }
    } else {
        return false;
    }
}


/**
 * Функция пытается авторизироваться с указанным слогином и паролем (переменные login и password).
 * Если пользователь найден - функция вернёт TRUE, иначе - FALSE.
 * ВНИМАНИЕ! Эта функция не выполняет вход, а только проверяет пользователя. Для записи
 * логина и пароля используйте функцию setLoginData.
 * 
 * @return bool  Статус авторизации
 */
function login() {
    mysql::getInstance()->select('admins', 'id', 1, array('login'    => $this->getLogin(), 
                                                          'password' => $this->getPasswordHash()));
    if (mysql::getInstance()->numRows() == 1) {
        return true;
    } else {
        return false;
    }
}


/**
 * Функция выполняет выход из системы
 * 
 * @return void
 */
function logout() {
    // Чистим кукисы
    SetCookie(COOKIE_LOGIN,    '', time()-1);
    SetCookie(COOKIE_PASSWORD, '', time()-1);
}


/**
 * Функция записывает в кукисы текущий логин и пароль
 * 
 * @return void
 */
function setLoginData() {
    SetCookie(COOKIE_LOGIN,    $this->getLogin(),        time()+36000000);
    SetCookie(COOKIE_PASSWORD, $this->getPasswordHash(), time()+36000000);
}


/**
 * Функция возвращает объект, если он был создан. Если объект не создан - функция создаёт объект
 * и вызывает его (Singleton)
 *
 * @static
 * @return object  Текущая копия объекта
 */
static function getInstance() {
    if (self::$instance == null) {
        self::$instance = new self();
    }
    return self::$instance;
}
  
}